home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -screenplay- / shareware / wreckage / source / assembly / asm_3d_b.asm < prev    next >
Assembly Source File  |  1999-02-08  |  2KB  |  164 lines

  1. ;    a0     &ox
  2. ;    a1    &oy
  3. ;    a2    &oz
  4. ;    a3    &oapp
  5. ;    a4    &sincache
  6. ;    d0    templong
  7. ;    sincache(0)=cvaz*32767;0
  8. ;    sincache(1)=svaz*32767;2
  9. ;    sincache(2)=cvax*32767;4
  10. ;    sincache(3)=svax*32767;6
  11. ;    sincache(4)=cvay*32767;8
  12. ;    sincache(5)=svay*32767;10
  13.  
  14.         ;A5-A7 MUST NOT BE TRASHED!!!
  15.  
  16.     MOVE.l    a6    ,-(a7)    ;PUSH a5
  17.     MOVE.l    d1    ,a6    ;load new value
  18.  
  19. _rot_loop1:
  20.  
  21.     MOVE.b     (a3)+    ,d1    ;oapp
  22.       BEQ     _hide_point2    ;(oapp=0)=> skip point
  23.  
  24.  
  25. ;Main Code :)
  26. ;--------
  27.  
  28.     MOVE.w    (a4)    ,d6    ;get cos
  29.     MOVE.w    2(a4)    ,d7    ;get sin
  30.  
  31.       MOVE.l     (a0)+    ,d1    ;d1=ox(n)
  32.      CLR.w     d1
  33.       SWAP     d1
  34.  
  35.       MOVE.w     d1    ,d2    ;d2=x
  36.       MULS.w     d6    ,d1    ;x*csa
  37.  
  38.       MULS.w     d7    ,d2    ;x*sna
  39.  
  40.  
  41.       MOVE.l     (a1)+    ,d3    ;oy(n)
  42.       CLR.w     d3
  43.       SWAP     d3
  44.  
  45.       MOVE.w     d3    ,d4    ;y
  46.  
  47.       MULS.w     d7    ,d3    ;y*sna
  48.       SUB.l     d3    ,d1    ;x*csa-y*sna
  49.  
  50.       MULS.w     d6    ,d4    ;y*csa
  51.       ADD.l     d2    ,d4    ;y*csa+x*sna
  52.  
  53.  
  54.  
  55.     ;d4 holds Y
  56.     ;d1 holds X
  57.  
  58.  
  59. _rot_loop2:
  60. ;      yy=y*cvax-z*svax    
  61. ;      zz=z*cvax+y*svax
  62.  
  63.     MOVE.w    4(a4)    ,d6    ;get cos
  64.     MOVE.w    6(a4)    ,d7    ;get sin
  65.  
  66.       MOVE.l     (a2)+    ,d5    ;d2=oz(n)
  67.      CLR.w     d5
  68.       SWAP     d5
  69.  
  70.       MOVE.w     d5    ,d2    ;d2=z
  71.  
  72.       MULS.w     d6    ,d5    ;z*csa
  73.       MULS.w     d7    ,d2    ;z*sna
  74.  
  75.     CLR.w    d4
  76.     SWAP    d4
  77.       MOVE.w     d4    ,d3    ;y is still here
  78.                 ;   <grin>
  79.  
  80.       MULS.w     d6    ,d3    ;y*csa
  81.       SUB.l     d2    ,d3    ;yy=y*csa-z*sna
  82.  
  83.       MULS.w     d7    ,d4    ;y*sna
  84.       ADD.l     d5    ,d4    ;zz=z*csa+y*sna
  85.  
  86. ;    X    D1
  87. ;    Z    D4
  88. ;    Y    D3 (do not trash)
  89. ;        -----------------
  90.  
  91. _rot_loop3:
  92. ;      xx=x*cvay-z*svay
  93. ;      zz=z*cvay+x*svay
  94.  
  95.     MOVE.w    8(a4)    ,d6    ;get cos
  96.     MOVE.w    10(a4)    ,d7    ;get sin
  97.  
  98.     CLR.W    d4
  99.     SWAP    d4
  100.       MOVE.w     d4    ,d2    ;d2=z (yes, it is still here)
  101.  
  102.       MULS.w     d6    ,d4    ;z*csa
  103.       MULS.w     d7    ,d2    ;z*sna
  104.  
  105.     CLR.w    d1
  106.     SWAP    d1
  107.  
  108.       MOVE.w     d1    ,d5    ;x is still here                ;   (I hope)
  109.       MULS.w     d6    ,d1    ;x*csa
  110.       SUB.l     d2    ,d1    ;xx=x*csa-z*sna
  111.  
  112.       MULS.w     d7    ,d5    ;x*sna
  113.       ADD.l     d4    ,d5    ;zz=z*csa+x*sna
  114.  
  115. ;    X    D1
  116. ;    Y    D3
  117. ;    Z    D5
  118.  
  119.  
  120. ;    And do the 2d->3d Projection
  121.  
  122.  
  123.     CLR.w    d3    ;d3 IS a longword..
  124.     SWAP    d3    ;but I am shifting it twice..
  125.     EXT.l    d3    ;yeah
  126.     ADD.l    #20,d3
  127.     TST.l     d3
  128.     BLE     _hide_point
  129.     
  130. ;MOVE.w    12(a4)    ,d2
  131.     DIVS.l    d3    ,d1    ;this is x
  132.     ASR.l    #8    ,d1
  133. ;    ASR.l    #1    ,d1
  134.     ADD.w    #160    ,d1
  135.  
  136.     DIVS.l    d3    ,d5    ;and this is z
  137.     ASR.l    #8    ,d5
  138. ;    ASR.l    #1    ,d5
  139.     ADD.l    #80    ,d5
  140.  
  141.     MOVE.w    #1    ,d7    ;display point!!
  142.     BRA    _loop_ending
  143.     
  144.         
  145. _hide_point2:
  146.     ADDQ.l    #4    ,a0
  147.     ADDQ.l    #4    ,a1
  148.     ADDQ.l    #4    ,a2
  149.  
  150. _hide_point:
  151.     CLR.w d7
  152.  
  153.  
  154. _loop_ending:
  155.     MOVE.w     d1    ,(a6)+    ;sx
  156.      MOVE.w     d5    ,(a6)+        ;sy
  157.       MOVE.w     d7    ,(a6)+        ;app
  158.  
  159.       SUBQ.l    #1    ,d0    ;n=n-1
  160.       BGT     _rot_loop1
  161.  
  162.  
  163.     MOVE.l    (a7)+    ,a6    ;POP A5
  164.